package April.april28;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

/*
通过反射获取class文件中构造方法，运行构造方法
运行构造方法，创建对象
    获取Class文件对象
    从Class文件对象中，获取需要的成员

  Constructor 描述构造方法对象类
 */
public class ReflectDemo_1 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class c = Class.forName("April.april28.Person");
//        使用Class文件对象，获取类的构造方法
//        使用 Constructor[] getConstructors()  获取Class文件中的所有公共构造方法
        Constructor[] sons = c.getConstructors();
        for (Constructor con : sons){
            System.out.println(con);
        }

//        使用Constructor(Class<T>...parmer) 获取指定的构造方法
        Constructor so = c.getConstructor();
        System.out.println(so);
//        运行空参数构造方法，Constructor类方法，newInstance()运行获取到的构造方法
        Object obj = so.newInstance();
        Person p = (Person)obj;
        p.eat();
        System.out.println(obj.toString());
    }
}
